/**
 * https://leetcode-cn.com/problems/house-robber-ii/
 * 打家劫舍II
 * 你是一个专业的小偷，计划偷窃沿街的房屋，每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ，这意味着第一个房屋和最后一个房屋是紧挨着的。同时，相邻的房屋装有相互连通的防盗系统，如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警 。
 * @param nums 
 */
const  rob = (nums: number[]): number => {
    const len = nums.length;
    // 只有一项
    if (len === 1) return nums[0] 
    // 有两项
    if (len === 2) return Math.max(nums[0], nums[1])


    // 获取[0, len - 2] 的最大值 即选择第一个房子, 不选最后一个房子
    let pprev = nums[0],
        prev = Math.max(nums[0], nums[1]),
        max1 = prev 
    for (let i = 2; i < len - 1; i++) {
        max1 = Math.max(pprev + nums[i], max1)

        pprev = prev;
        prev = max1;
    }

    // 获取[1, len - 1] 的盗窃的最大值, 即不选第一个房子
    pprev = nums[1]
    prev = Math.max(nums[1], nums[2])
    let max2 = prev
    for (let i = 3; i < len; i++) {
        max2 = Math.max(pprev + nums[i], max2)
        pprev = prev;
        prev = max2
    } 
    
    return Math.max(max1, max2)
};